### calculate ego IQV: รับ data.frame ของ degree
### คอลัมน์แรกต้องเป็น node name
### คอลัมน์ที่เหลือเป็น degree ของ ego แต่ละประเภท
ego_iqv <- function(degree_df) {
degree_df %>%
pivot_longer(cols = -1, names_to = "Tie", values_to = "Outdegree") %>%
group_by(node) %>%
mutate(Q = length(Outdegree),
p = Outdegree / sum(Outdegree),
) %>%
reframe(
IQV = (1 - sum(p^2)) / (1 - 1/Q)) %>%
ungroup() %>%
unique()
}
degree_df %>%
rownames_to_column("node") %>%
ego_iqv() %>%
bind_cols(degree_df)# A tibble: 14 × 8
node IQV outdegree_game outdeg_conflict outdeg_friendship
* <chr> <dbl> <dbl> <dbl> <dbl>
1 I1 0.686 4 0 1
2 I3 0 0 0 0
3 S1 0.881 6 0 3
4 S2 0.6 5 0 0
5 S4 0.917 6 0 4
6 W1 0.845 6 4 3
7 W2 0.732 5 3 0
8 W3 0.674 3 7 0
9 W4 0.905 5 5 3
10 W5 0.892 4 5 3
11 W6 0.911 4 5 3
12 W7 0.96 5 5 4
13 W8 0.811 0 0 0
14 W9 0.919 3 4 2
# ℹ 3 more variables: outdeg_antagonistic <dbl>, outdeg_help <dbl>,
# outdeg_trade <dbl>